iT邦幫忙

2021 iThome 鐵人賽

DAY 2
0
自我挑戰組

TypeScript 能手養成之旅系列 第 8

TypeScript 能手養成之旅 Day 8 物件型別-擴充型別-元組(Tuple)

  • 分享至 

  • xImage
  •  

前言

今天要來介紹,Typescript 特有的類型 TupleEnum,到底會是什麼,有趣的地方會是哪些呢?

元組(Tuple)

初步看到 Tuple 時,覺得這不就是 Array 嗎?心裡暗自竊喜了一下,不過 JavaScript 就有 Array 了,為何 TypeScript 還要新增一個呢? 但相較下去發現,原來沒那麼單純,如下

正常我們在定義 Array 會是這樣

let testArray: (number | string)[];
testArray = ['CY', 28]

console.log(testArray) // ['CY', 28]

但是如果是用 Tuple,會有以下的狀況

當我們定義好型別,預設值給與空陣列時,TypeScript 就會進一步提醒我們,不能這樣做,哇~第一步就給個震撼彈!

let testArray: [number, string] = [];

接下來賦值,第一個元素給予字串,再次得到 TypeScript 的關愛。

let testArray: [number, string];
testArray = ['28', 'CY']

有發現了什麼嗎?

沒有錯,Tuple 相較 Array 更加嚴格,因此不管是型別或者是位子都必須按照當初註解的規則走,很強硬,但是對需要帶入固定元素的陣列,起了一個很大的保護。

使用陣列方法

有沒有覺得 TupleArray 很像,只是比較嚴格一點,再來一發好消息,就是也可以使用 Array 的方法,例如 pushconcat 等。

我們試著使用 push

let testArray: [number, string] = [28, 'CY'];
testArray.push('will', 26)

console.log(testArray) //[ 28, 'CY', 'will', 26 ]

這邊發現如果是用 push 是可以將元素直接添加進去,而不會報錯,但是直接賦值是必須按照一開始註記的型別和元素數量規則走。

結語

複習一下,陣列和元組的差別。

陣列 => 只要符合一開始的元素型註記的規則,例如:let test: (string|number),元素就必須是 stringnumber,其餘元素的數量和順序就沒有限制。

元組 => 必須元素數量固定,每個元素型別也要完全一樣。

今天到此,明天將帶來另一個擴充型別 列舉(Enum),期待明日~


上一篇
TypeScript 能手養成之旅 Day 7 物件型別-函式型別
下一篇
TypeScript 能手養成之旅 Day 9 物件型別-擴充型別-列舉(Enum)
系列文
TypeScript 能手養成之旅16
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言